【ハンズオン】VPCトラフィクミラーリングを使ってEC2にログインせずにパケットキャプチャする方法を学ぼう#AWSSummit

【ハンズオン】VPCトラフィクミラーリングを使ってEC2にログインせずにパケットキャプチャする方法を学ぼう#AWSSummit

Amazon EC2インスタンスにログインしなくても、パケットキャプチャーできる。そう、Amazon VPC Traffic Mirroringならね。
Clock Icon2020.09.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ネットワークに関する

  • 脅威検出
  • コンテンツモニタリング
  • 問題判別

を行うために、パケットキャプチャーしたいことがあります。

VPCフローログだと、パケットのフローの情報は取得できますが、パケット内容は取得できません。 そんな時にぴったりなのが Amazon VPC traffic mirroring です。

EC2サーバーにログインせずにパケットキャプチャーし、任意のENIやNLBにパケットをコピーできます。

2020年9月8日から30日まで開催中のAWS Summit Onlineで、同機能のハンズオンセッション「HOL-12:パケットキャプチャでデバッグも万全(traffic mirroring)」 を拝聴しましたのでレポートします。

スピーカーはアマゾンウェブサービスジャパン株式会社のシニアマネージャ・プリンシパルソリューションアーキテクトの荒木靖宏さんです。

Amazon VPC Traffic Mirroring とは?

Traffic Mirroringには以下の様な機能があります。

  • EC2インスタンスのENIを通過するトラフィックをENIもしくはNLBにミラーリング
  • パケットはVirtual eXtensible Local Area Network(VXLAN)でカプセル化
  • EC2インスタンスにログインしなくてもパケットパケットキャプチャが可能
  • VPCフローログと異なりパケット内容を取得可能
  • ユースケース
    • 脅威検出
    • コンテンツモニタリング
    • 問題判別

ハンズオン内容

ハンズオンでは、以下の流れで手を動かします。

  1. EC2のパケットを別のEC2にミラーリング
  2. tcpdumpでパケットキャプチャ
  3. Wiresharkでパケットを眺める

1. EC2のパケットを別のEC2にミラーリング

本ハンズオンのメインです。

EC2を2台起動し、Amazon VPC Traffic Mirroring を利用して Client01 インスタンスのTCPパケットを Client02 にミラーします。

Amazon VPC Traffic Mirroringの設定では

  • ソース(ミラー元)は Client01のENI
  • ターゲット(ミラー先)はClient02のENI
  • フィルター(ミラーするトラフィックの条件)はソースからの80番ポートのTCP通信
  • セッション(ミラー内容を定義するエンティティ)は上述のソース・ターゲット・フィルターの組合せ

を指定します。

具体的な設定内容はハンズオンをご確認ください。

2. tcpdumpでパケットキャプチャ

ミラー先の Client02 で tcpdump を使ってパケットキャプチャーします。

$ sudo tcpdump -i eth0 -n port 4789

Client01 の ENI のパケットは Client02 の ENI にコピーされるため、-i eth0でNICを指定し、元のパケットは VXLANでカプセル化されるため、VXLAN用ポート 4789 を指定(port 4789)します。

Client01からHTTPリクエスト($ curl http://checkip.amazonaws.com)をすると、Client02にパケットがミラーされます。

目を凝らすと、VXLAN を使っていることやサーバーから 200 OK がかえってきていることがわかります。

3. Wiresharkでパケットを眺める

tcpdump そのままの出力を読み取るには慣れが必要なので、Wiresharkから眺められるように pcap 形式でパケットを保存します。

$ sudo tcpdump -i eth0 -n port 4789 -w testdump.pcap

Wireshark に pcap ファイルを取り込むと、Virtual eXtensible Local Area Network のブロックから、VXLAN を使っていることや、Flllow → TCP Stream から HTTP 通信のリクエスト・レスポンスを簡単に確認できます。

パケットをモニタリング

tcpdump 方式では、都度パケットキャプチャーして解析する必要があります。

SuicataZeek といった OSS を利用すると、簡単にパケットを監視することができます。

詳細は次のドキュメントを参照ください。

Working with open-source tools for Traffic Mirroring - Amazon Virtual Private Cloud

Traffic Mirroringの制約

Traffic MirroringはNitro 世代のインスタンスでなければ使えないといった利用制限があります。

詳細は次のドキュメントを参照ください。

Traffic Mirroring quotas and considerations - Amazon Virtual Private Cloud

まとめ

Amazon VPC Traffic Mirroringを利用すると、ソースとなるENIを指定するだけで簡単にパケットキャプチャーできます。 EC2インスタンスにログインして tcpdump を走らせる時のような各種調整は不要です。

日々の運用に活用すべく、ぜひ一度ハンズオンをお試しください。

参考

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.